// 导入定义验证规则的模块 joi
const Joi = require('joi');

/**
* string() 值必须是字符串
* alphanum() 值只能是包含 a-zA-Z0-9 的字符串
* min(length) 最小长度
* max(length) 最大长度
* required() 值是必填项，不能为 undefined
* pattern(正则表达式) 值必须符合正则表达式的规则
*/

// 密码的验证规则 注册用户 和 修改密码
const passwordSchema = Joi.string().regex(/^[a-zA-Z0-9]{3,12}$/).required().error(new Error('密码不符合要求'));

/************注  册************/
// 验证用户信息
const validateUserRegister = user => {
    // 定义对象的验证规则
    const schema = {
        // 用户名的验证规则
        username: Joi.string().alphanum().min(1).max(10).required().error(new Error('用户名不符合要求')),
        // 密码的验证规则
        password: passwordSchema
    };

    // 实施验证
    return Joi.validate(user, schema);
}

/************更  新************/
// 定义 id, nickname, emial 的验证规则

const validateUserModify = user => {
    // 定义对象的验证规则
    const schema = {
        // id: Joi.number().integer().min(1).required().error(new Error('id不符合要求')),
        nickname: Joi.string().required().error(new Error('昵称不符合要求')),
        email: Joi.string().email().required().error(new Error('邮箱不符合要求')),
    };
    // 实施验证
    return Joi.validate(user, schema);
}

/************重置密码************/
// 验证规则对象 - 重置密码

const validateUserResetPwd = user => {
    // 定义对象的验证规则
    const schema = {
        // 使用 password 这个规则，验证 req.body.oldPwd 的值
        oldPwd: passwordSchema,
        // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd的值
        // 解读：
        // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
        // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
        // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
        newPwd: Joi.not(Joi.ref('oldPwd')).concat(passwordSchema).error(new Error('密码不符合要求')),
    };
    // 实施验证
    return Joi.validate(user, schema);
}

/************修改头像************/

const validateUserAvatar = user => {
    // 定义对象的验证规则
    const schema = {
        // 定义 avatar 的验证规则如下：
        // dataUri() 指的是如下格式的字符串数据：
        // 
        avatar: Joi.string().dataUri().required().error(new Error('头像不符合要求'))
    };
    // 实施验证
    return Joi.validate(user, schema);
}



module.exports = {
    validateUserRegister,
    validateUserModify,
    validateUserResetPwd,
    validateUserAvatar
}

